﻿using System;
using System.Collections.Generic;
using System.Text;

namespace System.Peppers.Wmi
{
    /// <summary>
    /// Win32_NetworkAdapterConfiguration error codes, straight from MSDN
    /// </summary>
    public enum NetworkAdapterResult : uint
    {
        /// <summary>
        /// Successful completion, no reboot required.
        /// </summary>
        Success = 0,
        /// <summary>
        /// Successful completion, reboot required.
        /// </summary>
        SuccessRequiringRestart = 1,
        /// <summary>
        /// Method not supported
        /// </summary>
        NotSupported = 64,
        /// <summary>
        /// Unknown failure.
        /// </summary>
        UnknownFailure = 65,
        /// <summary>
        /// Invalid subnet mask.
        /// </summary>
        InvalidSubnetMask = 66,
        /// <summary>
        /// An error occurred while processing an instance that was returned.
        /// </summary>
        InstanceError = 67,
        /// <summary>
        /// Invalid input parameter.
        /// </summary>
        InvalidInputParameter = 68,
        /// <summary>
        /// More than five gateways specified.
        /// </summary>
        GatewayLimit = 69,
        /// <summary>
        /// Invalid IP address.
        /// </summary>
        InvalidIPAddress = 70,
        /// <summary>
        /// Invalid gateway IP address.
        /// </summary>
        InvalidGateway = 71,
        /// <summary>
        /// An error occurred while accessing the registry for the requested information.
        /// </summary>
        RegistryError = 72,
        /// <summary>
        /// Invalid domain name.
        /// </summary>
        InvalidDomainName = 73,
        /// <summary>
        /// Invalid host name.
        /// </summary>
        InvalidHostName = 74,
        /// <summary>
        /// No primary or secondary WINS server defined.
        /// </summary>
        InvalidWinsServer = 75,
        /// <summary>
        /// Invalid file.
        /// </summary>
        InvalidFile = 76,
        /// <summary>
        /// Invalid system path.
        /// </summary>
        InvalidSystemPath = 77,
        /// <summary>
        /// File copy failed.
        /// </summary>
        FileCopyFailed = 78,
        /// <summary>
        /// Invalid security parameter.
        /// </summary>
        InvalidSecurityParameter = 79,
        /// <summary>
        /// Unable to configure TCP/IP service.
        /// </summary>
        TcpIPServiceError = 80,
        /// <summary>
        /// Unable to configure DHCP service.
        /// </summary>
        DhcpServiceError = 81,
        /// <summary>
        /// Unable to renew DHCP lease.
        /// </summary>
        DhcpRenewError = 82,
        /// <summary>
        /// Unable to release DHCP lease
        /// </summary>
        DhcpReleaseError = 83,
        /// <summary>
        /// IP not enabled on adapter.
        /// </summary>
        IPNotEnabled = 84,
        /// <summary>
        /// IPX not enabled on adapter.
        /// </summary>
        IPXNotEnabled = 85,
        /// <summary>
        /// Frame or network number bounds error.
        /// </summary>
        FrameError = 86,
        /// <summary>
        /// Invalid frame type.
        /// </summary>
        InvalidFrame = 87,
        /// <summary>
        /// Invalid network number.
        /// </summary>
        InvalidNetwork = 88,
        /// <summary>
        /// Duplicate network number.
        /// </summary>
        DuplicateNetwork = 89,
        /// <summary>
        /// Parameter out of bounds.
        /// </summary>
        ParameterOutOfBounds = 90,
        /// <summary>
        /// Access denied.
        /// </summary>
        AccessDenied = 91,
        /// <summary>
        /// Out of memory.
        /// </summary>
        OutOfMemory = 92,
        /// <summary>
        /// Already exists.
        /// </summary>
        AlreadyExists = 93,
        /// <summary>
        /// Path, file, or object not found.
        /// </summary>
        NotFound = 94,
        /// <summary>
        /// Unable to notify service.
        /// </summary>
        NotifyError = 95,
        /// <summary>
        /// Unable to notify DNS service.
        /// </summary>
        NotifyDnsError = 96,
        /// <summary>
        /// Interface not configurable.
        /// </summary>
        NotConfigurable = 97,
        /// <summary>
        /// Not all DHCP leases can be released or renewed.
        /// </summary>
        DhcpLeaseNonRenewable = 98,
        /// <summary>
        /// DHCP not enabled on adapter.
        /// </summary>
        DhcpNotEnabled = 100,
    }

    /// <summary>
    /// Value that specifies the possible settings related to NetBIOS over TCP/IP.
    /// </summary>
    public enum TcpipNetbiosOptions : uint
    {
        /// <summary>
        /// Enable Netbios via DHCP
        /// </summary>
        EnableViaDhcp = 0,
        /// <summary>
        /// Enable Netbios
        /// </summary>
        Enable = 1,
        /// <summary>
        /// Disable Netbios
        /// </summary>
        Disable = 2,
    }

    /// <summary>
    /// Type of media access available for the LogicalDisk class.  This property is inherited from CIM_StorageExtent.
    /// </summary>
    public enum LogicalDiskAccess : ushort
    {
        /// <summary>
        /// Unknown
        /// </summary>
        Unknown = 0,
        /// <summary>
        /// Readable
        /// </summary>
        Readable = 1,
        /// <summary>
        /// Writable
        /// </summary>
        Writable = 2,
        /// <summary>
        /// Read/Write Supported
        /// </summary>
        ReadWriteSupported = 3,
        /// <summary>
        /// Write Once
        /// </summary>
        WriteOnce = 4,
    }

    /// <summary>
    /// Numeric value that corresponds to the type of disk drive this logical disk represents.
    /// </summary>
    public enum LogicalDiskDriveType : uint
    {
        /// <summary>
        /// Unknown
        /// </summary>
        Unknown = 0,
        /// <summary>
        /// No Root Directory
        /// </summary>
        NoRootDirectory = 1,
        /// <summary>
        /// Removable Disk
        /// </summary>
        RemovableDisk = 2,
        /// <summary>
        /// Local Disk
        /// </summary>
        LocalDisk = 3,
        /// <summary>
        /// Network Drive
        /// </summary>
        NetworkDrive = 4,
        /// <summary>
        /// Compact Disc
        /// </summary>
        CompactDisc = 5,
        /// <summary>
        /// RAM Disk
        /// </summary>
        RamDisk = 6,
    }

    /// <summary>
    /// Type of media currently present in the logical drive. This value will be one of the values of the MEDIA_TYPE enumeration defined in Winioctl.h. The value may not be exact for removable drives if currently there is no media in the drive.
    /// </summary>
    public enum LogicalDiskMediaType : uint
    {
        /// <summary>
        /// Format is unknown
        /// </summary>
        Unknown = 0,
        /// <summary>
        /// 5 1/4-Inch Floppy Disk - 1.2 MB - 512 bytes/sector
        /// </summary>
        F5_1Pt2_512 = 1,
        /// <summary>
        /// 3 1/2-Inch Floppy Disk - 1.44 MB -512 bytes/sector
        /// </summary>
        F3_1Pt44_512 = 2,
        /// <summary>
        /// 3 1/2-Inch Floppy Disk - 2.88 MB - 512 bytes/sector
        /// </summary>
        F3_2Pt88_512 = 3,
        /// <summary>
        /// 3 1/2-Inch Floppy Disk - 20.8 MB - 512 bytes/sector
        /// </summary>
        F3_20Pt8_512 = 4,
        /// <summary>
        /// 3 1/2-Inch Floppy Disk - 720 KB - 512 bytes/sector
        /// </summary>
        F3_720_512 = 5,
        /// <summary>
        /// 5 1/4-Inch Floppy Disk - 360 KB - 512 bytes/sector
        /// </summary>
        F5_360_512 = 6,
        /// <summary>
        /// 5 1/4-Inch Floppy Disk - 320 KB - 512 bytes/sector
        /// </summary>
        F5_320_512 = 7,
        /// <summary>
        /// 5 1/4-Inch Floppy Disk - 320 KB - 1024 bytes/sector
        /// </summary>
        F5_320_1024 = 8,
        /// <summary>
        /// 5 1/4-Inch Floppy Disk - 180 KB - 512 bytes/sector
        /// </summary>
        F5_180_512 = 9,
        /// <summary>
        /// 5 1/4-Inch Floppy Disk - 160 KB - 512 bytes/sector
        /// </summary>
        F5_160_512 = 10,
        /// <summary>
        /// Removable media other than floppy
        /// </summary>
        RemovableNonFloppy = 11,
        /// <summary>
        /// Fixed hard disk media
        /// </summary>
        FixedHardDisk = 12,
        /// <summary>
        /// 3 1/2-Inch Floppy Disk - 120 MB - 512 bytes/sector
        /// </summary>
        F3_120M_512 = 13,
        /// <summary>
        /// 3 1/2-Inch Floppy Disk - 640 KB - 512 bytes/sector
        /// </summary>
        F3_640_512 = 14,
        /// <summary>
        /// 5 1/4-Inch Floppy Disk - 640 KB - 512 bytes/sector
        /// </summary>
        F5_640_512 = 15,
        /// <summary>
        /// 5 1/4-Inch Floppy Disk - 720 KB - 512 bytes/sector
        /// </summary>
        F5_720_512 = 16,
        /// <summary>
        /// 3 1/2-Inch Floppy Disk - 1.2 MB - 512 bytes/sector
        /// </summary>
        F3_1Pt2_512 = 17,
        /// <summary>
        /// 3 1/2-Inch Floppy Disk - 1.23 MB - 1024 bytes/sector
        /// </summary>
        F3_1Pt23_1024 = 18,
        /// <summary>
        /// 5 1/4-Inch Floppy Disk - 1.23 MB - 1024 bytes/sector
        /// </summary>
        F5_1Pt23_1024 = 19,
        /// <summary>
        /// 3 1/2-Inch Floppy Disk - 128 MB - 512 bytes/sector
        /// </summary>
        F3_128Mb_512 = 20,
        /// <summary>
        /// 3 1/2-Inch Floppy Disk - 230 MB - 512 bytes/sector
        /// </summary>
        F3_230Mb_512 = 21,
        /// <summary>
        /// 8-Inch Floppy Disk - 256 KB - 128 bytes/sector
        /// </summary>
        F8_256_128 = 22,
    }

    /// <summary>
    /// Return values for LogicalDisk.CheckDisk()
    /// </summary>
    public enum CheckDiskResult : uint
    {
        /// <summary>
        /// Success - Chkdsk Completed
        /// </summary>
        Success = 0,
        /// <summary>
        /// Success - Locked and Chkdsk Scheduled on Reboot
        /// </summary>
        SuccessRequiringRestart = 1,
        /// <summary>
        /// Failure - Unknown File System
        /// </summary>
        Failure = 2,
        /// <summary>
        /// Failure - Unknown Error
        /// </summary>
        FailureUnknown = 3,
    }

    /// <summary>
    /// Return values for ExcludeFromAutochk
    /// </summary>
    public enum SetAutoCheckResult : uint
    {
        /// <summary>
        /// Success
        /// </summary>
        Success = 0,
        /// <summary>
        /// Error - Remote Drive
        /// </summary>
        ErrorRemoteDrive = 1,
        /// <summary>
        /// Error - Removable Drive
        /// </summary>
        ErrorRemovableDrive = 2,
        /// <summary>
        /// Error - Drive Not Root Directory
        /// </summary>
        ErrorDriveNotRoot = 3,
        /// <summary>
        /// Error - Unknown Drive
        /// </summary>
        ErrorUnknownDrive = 4,
    }

    /// <summary>
    /// Enumerated value that specifies the type of SID.
    /// </summary>
    public enum AccountSIDType : byte
    {
        /// <summary>
        /// User
        /// </summary>
        SidTypeUser = 1,
        /// <summary>
        /// Group
        /// </summary>
        SidTypeGroup = 2,
        /// <summary>
        /// Domain
        /// </summary>
        SidTypeDomain = 3,
        /// <summary>
        /// Alias
        /// </summary>
        SidTypeAlias = 4,
        /// <summary>
        /// Well-known group
        /// </summary>
        SidTypeWellKnownGroup = 5,
        /// <summary>
        /// Deleted account
        /// </summary>
        SidTypeDeletedAccount = 6,
        /// <summary>
        /// Invalid
        /// </summary>
        SidTypeInvalid = 7,
        /// <summary>
        /// Unknown
        /// </summary>
        SidTypeUnknown = 8,
        /// <summary>
        /// Computer
        /// </summary>
        SidTypeComputer = 9,
    }

    /// <summary>
    /// Flags that describe the characteristics of a Windows user account.
    /// </summary>
    [Flags]
    public enum UserAccountType : uint
    {
        /// <summary>
        /// Null value
        /// </summary>
        NULL = 0,
        /// <summary>
        /// Local user account for users who have a primary account in another domain. This account provides user access to this domain only—not to any domain that trusts this domain.
        /// </summary>
        UF_TEMP_DUPLICATE_ACCOUNT = 0x100,
        /// <summary>
        /// Default account type that represents a typical user
        /// </summary>
        UF_NORMAL_ACCOUNT = 0x200,
        /// <summary>
        /// Account for a system domain that trusts other domains.
        /// </summary>
        UF_INTERDOMAIN_TRUST_ACCOUNT = 0x800,
        /// <summary>
        /// Computer account for a computer system running Windows 2000 or Windows NT that is a member of this domain.
        /// </summary>
        UF_WORKSTATION_TRUST_ACCOUNT = 0x1000,
        /// <summary>
        /// Account for a system backup domain controller that is a member of this domain.
        /// </summary>
        UF_SERVER_TRUST_ACCOUNT = 0x2000,
    }

    /// <summary>
    /// Return value from UserAccount.Rename()
    /// </summary>
    public enum AccountRenameResult : uint
    {
        /// <summary>
        /// Success.
        /// </summary>
        Success = 0,
        /// <summary>
        /// Instance not found.
        /// </summary>
        InstanceNotFound = 1,
        /// <summary>
        /// Instance required.
        /// </summary>
        InstanceRequired = 2,
        /// <summary>
        /// Invalid parameter.
        /// </summary>
        InvalidParameter = 3,
        /// <summary>
        /// User not found.
        /// </summary>
        UserNotFound = 4,
        /// <summary>
        /// Domain not found.
        /// </summary>
        DomainNotFound = 5,
        /// <summary>
        /// Operation is allowed only on the primary domain controller of the domain.
        /// </summary>
        PrimaryDomainOnly = 6,
        /// <summary>
        /// Operation is not allowed on the last administrative account.
        /// </summary>
        LastAdministrator = 7,
        /// <summary>
        /// Operation is not allowed on specified special groups: user, admin, local, or guest.
        /// </summary>
        SpecialGroup = 8,
        /// <summary>
        /// Other API error.
        /// </summary>
        ApiError = 9,
        /// <summary>
        /// Internal error.
        /// </summary>
        InternalError = 10,
    }

    /// <summary>
    /// Type of physical memory.
    /// </summary>
    public enum MemoryType : ushort
    {
        /// <summary>
        /// Unknown
        /// </summary>
        Unknown = 0,
        /// <summary>
        /// Other
        /// </summary>
        Other = 1,
        /// <summary>
        /// DRAM
        /// </summary>
        DRAM = 2,
        /// <summary>
        /// Synchronous DRAM
        /// </summary>
        SyncDRAM = 3,
        /// <summary>
        /// Cache DRAM
        /// </summary>
        CacheDRAM = 4,
        /// <summary>
        /// EDO
        /// </summary>
        EDO = 5,
        /// <summary>
        /// EDRAM
        /// </summary>
        EDRAM = 6,
        /// <summary>
        /// VRAM
        /// </summary>
        VRAM = 7,
        /// <summary>
        /// SRAM
        /// </summary>
        SRAM = 8,
        /// <summary>
        /// RAM
        /// </summary>
        RAM = 9,
        /// <summary>
        /// ROM
        /// </summary>
        ROM = 10,
        /// <summary>
        /// Flash
        /// </summary>
        Flash = 11,
        /// <summary>
        /// EEPROM
        /// </summary>
        EEPROM = 12,
        /// <summary>
        /// FEPROM
        /// </summary>
        FEPROM = 13,
        /// <summary>
        /// EPROM
        /// </summary>
        EPROM = 14,
        /// <summary>
        /// CDRAM
        /// </summary>
        CDRAM = 15,
        /// <summary>
        /// 3DRAM
        /// </summary>
        _3DRAM = 16,
        /// <summary>
        /// SDRAM
        /// </summary>
        SDRAM = 17,
        /// <summary>
        /// SGRAM
        /// </summary>
        SGRAM = 18,
        /// <summary>
        /// RDRAM
        /// </summary>
        RDRAM = 19,
        /// <summary>
        /// DDR
        /// </summary>
        DDR = 20,
        /// <summary>
        /// DDR-2
        /// </summary>
        DDR2 = 21,
    }

    /// <summary>
    /// Type of physical memory represented.
    /// </summary>
    [Flags]
    public enum MemoryTypeDetail : ushort
    {
        /// <summary>
        /// Reserved
        /// </summary>
        Reserved = 0x1,
        /// <summary>
        /// Other
        /// </summary>
        Other = 0x2,
        /// <summary>
        /// Unknown
        /// </summary>
        Unknown = 0x4,
        /// <summary>
        /// Fast-paged
        /// </summary>
        FastPaged = 0x8,
        /// <summary>
        /// Static column
        /// </summary>
        StaticColumn = 0x10,
        /// <summary>
        /// Pseudo-static
        /// </summary>
        PseudoStatic = 0x20,
        /// <summary>
        /// RAMBUS
        /// </summary>
        RAMBUS = 0x40,
        /// <summary>
        /// Synchronous
        /// </summary>
        Synchronous = 0x80,
        /// <summary>
        /// CMOS
        /// </summary>
        CMOS = 0x100,
        /// <summary>
        /// EDO
        /// </summary>
        EDO = 0x200,
        /// <summary>
        /// Window DRAM
        /// </summary>
        WindowDRAM = 0x400,
        /// <summary>
        /// Cache DRAM
        /// </summary>
        CacheDRAM = 0x800,
        /// <summary>
        /// Nonvolatile
        /// </summary>
        NonVolatile = 0x1000,
    }

    /// <summary>
    /// Processor architecture used by the platform.
    /// </summary>
    public enum ProcessorArchitecture : ushort
    {
        /// <summary>
        /// x86
        /// </summary>
        x86 = 0,
        /// <summary>
        /// MIPS
        /// </summary>
        MIPS = 1,
        /// <summary>
        /// Alpha
        /// </summary>
        Alpha = 2,
        /// <summary>
        /// PowerPC
        /// </summary>
        PowerPC = 3,
        /// <summary>
        /// Intel Itanium Processor Family (IPF)
        /// </summary>
        Itanium = 6,
        /// <summary>
        /// x64
        /// </summary>
        x64 = 9,
    }

    /// <summary>
    /// Current status of the processor. Status changes indicate processor usage, but not the physical condition of the processor.
    /// </summary>
    public enum CpuStatus : ushort
    {
        /// <summary>
        /// Unknown
        /// </summary>
        Unknown = 0,
        /// <summary>
        /// CPU Enabled
        /// </summary>
        Enabled = 1,
        /// <summary>
        /// CPU Disabled by User via BIOS Setup
        /// </summary>
        DisabledByUser = 2,
        /// <summary>
        /// CPU Disabled by BIOS (POST Error)
        /// </summary>
        DisabledByBios = 3,
        /// <summary>
        /// CPU Is Idle
        /// </summary>
        Idle = 4,
        /// <summary>
        /// Reserved
        /// </summary>
        Reserved = 5,
        /// <summary>
        /// Reserved
        /// </summary>
        Reserved2 = 6,
        /// <summary>
        /// Other
        /// </summary>
        Other = 7,
    }

    /// <summary>
    /// Primary function of the processor.
    /// </summary>
    public enum ProcessorType : ushort
    {
        /// <summary>
        /// Other
        /// </summary>
        Other = 1,
        /// <summary>
        /// Unknown
        /// </summary>
        Unknown = 2,
        /// <summary>
        /// Central Processor
        /// </summary>
        Central = 3,
        /// <summary>
        /// Math Processor
        /// </summary>
        Math = 4,
        /// <summary>
        /// DSP Processor
        /// </summary>
        DSP = 5,
        /// <summary>
        /// Video Processor
        /// </summary>
        Video = 6,
    }

    /// <summary>
    /// Processor family type. 
    /// </summary>
    public enum ProcessorFamily : ushort
    {
        /// <summary>
        /// Other
        /// </summary>
        Other = 1,
        /// <summary>
        /// Unknown
        /// </summary>
        Unknown = 2,
        /// <summary>
        /// 8086
        /// </summary>
        _8086 = 3,
        /// <summary>
        /// 80286
        /// </summary>
        _80286 = 4,
        /// <summary>
        /// Intel386™ Processor
        /// </summary>
        Intel386 = 5,
        /// <summary>
        /// Intel486™ Processor
        /// </summary>
        Intel486 = 6,
        /// <summary>
        /// 8087
        /// </summary>
        _8087 = 7,
        /// <summary>
        /// 80287
        /// </summary>
        _80287 = 8,
        /// <summary>
        /// 80387
        /// </summary>
        _80387 = 9,
        /// <summary>
        /// 80487
        /// </summary>
        _80487 = 10,
        /// <summary>
        /// Pentium Brand
        /// </summary>
        PentiumBrand = 11,
        /// <summary>
        /// Pentium Pro
        /// </summary>
        PentiumPro = 12,
        /// <summary>
        /// Pentium II
        /// </summary>
        PentiumII = 13,
        /// <summary>
        /// Pentium Processor with MMX™ Technology
        /// </summary>
        PentiumMMX = 14,
        /// <summary>
        /// Celeron™
        /// </summary>
        Celeron = 15,
        /// <summary>
        /// Pentium II Xeon™
        /// </summary>
        PentiumIIXeon = 16,
        /// <summary>
        /// Pentium III
        /// </summary>
        PentiumIII = 17,
        /// <summary>
        /// M1 Family
        /// </summary>
        M1Family = 18,
        /// <summary>
        /// M2 Family
        /// </summary>
        M2Family = 19,
        /// <summary>
        /// AMD Duron™ Processor Family
        /// </summary>
        AMDDuron = 24,
        /// <summary>
        /// K5 Family
        /// </summary>
        K5Family = 25,
        /// <summary>
        /// K6 Family
        /// </summary>
        K6Family = 26,
        /// <summary>
        /// K6-2
        /// </summary>
        K6_2 = 27,
        /// <summary>
        /// K6-3
        /// </summary>
        K6_3 = 28,
        /// <summary>
        /// AMD Athlon™ Processor Family
        /// </summary>
        AMDAthlon = 29,
        /// <summary>
        /// AMD2900 Family
        /// </summary>
        AMD2900 = 30,
        /// <summary>
        /// K6-2+
        /// </summary>
        K6_2Plus = 31,
        /// <summary>
        /// Power PC Family
        /// </summary>
        PowerPCFamily = 32,
        /// <summary>
        /// Power PC 601
        /// </summary>
        PowerPC601 = PowerPCFamily + 1,
        /// <summary>
        /// Power PC 603
        /// </summary>
        PowerPC603 = PowerPCFamily + 2,
        /// <summary>
        /// Power PC 603+
        /// </summary>
        PowerPC603Plus = PowerPCFamily + 3,
        /// <summary>
        /// Power PC 604
        /// </summary>
        PowerPC604 = PowerPCFamily + 4,
        /// <summary>
        /// Power PC 620
        /// </summary>
        PowerPC620 = PowerPCFamily + 5,
        /// <summary>
        /// Power PC X704
        /// </summary>
        PowerPCX704 = PowerPCFamily + 6,
        /// <summary>
        /// Power PC 750
        /// </summary>
        PowerPC750 = PowerPCFamily + 7,
        /// <summary>
        /// Alpha Family
        /// </summary>
        AlphaFamily = 48,
        /// <summary>
        /// Alpha 21064
        /// </summary>
        Alpha21064 = AlphaFamily + 1,
        /// <summary>
        /// Alpha 21066
        /// </summary>
        Alpha21066 = AlphaFamily + 2,
        /// <summary>
        /// Alpha 21164
        /// </summary>
        Alpha21164 = AlphaFamily + 3,
        /// <summary>
        /// Alpha 21164PC
        /// </summary>
        Alpha21164PC = AlphaFamily + 4,
        /// <summary>
        /// Alpha 21164a
        /// </summary>
        Alpha21164a = AlphaFamily + 5,
        /// <summary>
        /// Alpha 21264
        /// </summary>
        Alpha21264 = AlphaFamily + 6,
        /// <summary>
        /// Alpha 21364
        /// </summary>
        Alpha21364 = AlphaFamily + 7,
        /// <summary>
        /// MIPS Family
        /// </summary>
        MIPSFamily = 64,
        /// <summary>
        /// MIPS R4000
        /// </summary>
        MIPSR4000 = MIPSFamily + 1,
        /// <summary>
        /// MIPS R4200
        /// </summary>
        MIPSR4200 = MIPSFamily + 2,
        /// <summary>
        /// MIPS R4400
        /// </summary>
        MIPSR4400 = MIPSFamily + 3,
        /// <summary>
        /// MIPS R4600
        /// </summary>
        MIPSR4600 = MIPSFamily + 4,
        /// <summary>
        /// MIPS R10000
        /// </summary>
        MIPSR10000 = MIPSFamily + 5,
        /// <summary>
        /// SPARC Family
        /// </summary>
        SPARCFamily = 80,
        /// <summary>
        /// SuperSPARC
        /// </summary>
        SuperSPARC = SPARCFamily + 1,
        /// <summary>
        /// microSPARC II
        /// </summary>
        MicroSPARCII = SPARCFamily + 2,
        /// <summary>
        /// microSPARC IIep
        /// </summary>
        MicroSPARCIIep = SPARCFamily + 3,
        /// <summary>
        /// UltraSPARC
        /// </summary>
        UltraSPARC = SPARCFamily + 4,
        /// <summary>
        /// UltraSPARC II
        /// </summary>
        UltraSPARCII = SPARCFamily + 5,
        /// <summary>
        /// UltraSPARC IIi
        /// </summary>
        UltraSPARCIIi = SPARCFamily + 6,
        /// <summary>
        /// UltraSPARC III
        /// </summary>
        UltraSPARCIII = SPARCFamily + 7,
        /// <summary>
        /// UltraSPARC IIIi
        /// </summary>
        UltraSPARCIIIi = SPARCFamily + 8,
        /// <summary>
        /// 68040
        /// </summary>
        _68040 = 96,
        /// <summary>
        /// 68xxx Family
        /// </summary>
        _68xxxFamily = _68040 + 1,
        /// <summary>
        /// 68000
        /// </summary>
        _68000 = _68040 + 2,
        /// <summary>
        /// 68010
        /// </summary>
        _68010 = _68040 + 3,
        /// <summary>
        /// 68020
        /// </summary>
        _68020 = _68040 + 4,
        /// <summary>
        /// 68030
        /// </summary>
        _68030 = _68040 + 4,
        /// <summary>
        /// Hobbit Family
        /// </summary>
        HobbitFamily = 112,
        /// <summary>
        /// Crusoe™ TM5000 Family
        /// </summary>
        CrusoeTM5000Family = 120,
        /// <summary>
        /// Crusoe™ TM3000 Family
        /// </summary>
        CrusoeTM3000Family = 121,
        /// <summary>
        /// Efficeon™ TM8000 Family
        /// </summary>
        EfficeonTM8000Family = 122,
        /// <summary>
        /// Weitek
        /// </summary>
        Weitek = 128,
        /// <summary>
        /// Itanium™ Processor
        /// </summary>
        Itanium = 130,
        /// <summary>
        /// AMD Athlon™ 64 Processor Famiily
        /// </summary>
        AMDAthlon64 = 131,
        /// <summary>
        /// AMD Opteron™ Processor Family
        /// </summary>
        AMDOpteron = 132,
        /// <summary>
        /// PA-RISC Family
        /// </summary>
        PA_RISCFamily = 144,
        /// <summary>
        /// PA-RISC 8500
        /// </summary>
        PA_RISC8500 = PA_RISCFamily + 1,
        /// <summary>
        /// PA-RISC 8000
        /// </summary>
        PA_RISC8000 = PA_RISCFamily + 2,
        /// <summary>
        /// PA-RISC 7300LC
        /// </summary>
        PA_RISC7300LC = PA_RISCFamily + 3,
        /// <summary>
        /// PA-RISC 7200
        /// </summary>
        PA_RISC7200 = PA_RISCFamily + 4,
        /// <summary>
        /// PA-RISC 7100LC
        /// </summary>
        PA_RISC7100LC = PA_RISCFamily + 5,
        /// <summary>
        /// PA-RISC 7100
        /// </summary>
        PA_RISC7100 = PA_RISCFamily + 6,
        /// <summary>
        /// V30 Family
        /// </summary>
        V30Family = 160,
        /// <summary>
        /// Pentium III Xeon™ Processor
        /// </summary>
        PentiumIIIXeon = 176,
        /// <summary>
        /// Pentium III Processor with Intel SpeedStep™ Technology
        /// </summary>
        PentiumIIISpeedStep = 177,
        /// <summary>
        /// Pentium 4
        /// </summary>
        PentiumIV = 178,
        /// <summary>
        /// Intel Xeon™
        /// </summary>
        IntelXeon = 179,
        /// <summary>
        /// AS400 Family
        /// </summary>
        AS400Family = 180,
        /// <summary>
        ///Intel Xeon™ Processor MP
        /// </summary>
        IntelXeonMP = 181,
        /// <summary>
        /// AMD Athlon™ XP Family
        /// </summary>
        AMDAthlonXP = 182,
        /// <summary>
        /// AMD Athlon™ MP Family
        /// </summary>
        AMDAthlonMP = 183,
        /// <summary>
        /// Intel Itanium 2
        /// </summary>
        IntelItanium2 = 184,
        /// <summary>
        /// Intel Pentium M Processor
        /// </summary>
        IntelPentiumM = 185,
        /// <summary>
        /// K7
        /// </summary>
        K7 = 190,
        /// <summary>
        /// IBM390 Family
        /// </summary>
        IBM390Family = 200,
        /// <summary>
        /// G4
        /// </summary>
        G4 = 201,
        /// <summary>
        /// G5
        /// </summary>
        G5 = 202,
        /// <summary>
        /// G6
        /// </summary>
        G6 = 204,
        /// <summary>
        /// z/Architecture Base
        /// </summary>
        zArchitectureBase = 204,
        /// <summary>
        /// i860
        /// </summary>
        i860 = 250,
        /// <summary>
        /// i960
        /// </summary>
        i960 = 251,
        /// <summary>
        /// SH-3
        /// </summary>
        SH3 = 260,
        /// <summary>
        /// SH-4
        /// </summary>
        SH4 = 261,
        /// <summary>
        /// ARM
        /// </summary>
        ARM = 280,
        /// <summary>
        /// StrongARM
        /// </summary>
        StrongARM = 281,
        /// <summary>
        /// 6x86
        /// </summary>
        _6x86 = 300,
        /// <summary>
        /// MediaGX
        /// </summary>
        MediaGX = 301,
        /// <summary>
        /// MII
        /// </summary>
        MII = 302,
        /// <summary>
        /// WinChip
        /// </summary>
        WinChip = 320,
        /// <summary>
        /// DSP
        /// </summary>
        DSP = 350,
        /// <summary>
        /// Video Processor
        /// </summary>
        Video = 500,
    }

    /// <summary>
    /// Bitmap of attributes for a Windows-based printing device.
    /// </summary>
    [Flags]
    public enum PrinterAttributes : uint
    {
        /// <summary>
        /// Queued - Print jobs are buffered and queued.
        /// </summary>
        PRINTER_ATTRIBUTE_QUEUED = 0x1,
        /// <summary>
        /// Direct - Document to be sent directly to the printer. This value is used if print jobs are not queued correctly.
        /// </summary>
        PRINTER_ATTRIBUTE_DIRECT = 0x2,
        /// <summary>
        /// Default - Default printer on a computer.
        /// </summary>
        PRINTER_ATTRIBUTE_DEFAULT = 0x4,
        /// <summary>
        /// Shared - Available as a shared network resource.
        /// </summary>
        PRINTER_ATTRIBUTE_SHARED = 0x8,
        /// <summary>
        /// Network - Attached to a network. If both Local and Network bits are set, this indicates a network printer.
        /// </summary>
        PRINTER_ATTRIBUTE_NETWORK = 0x10,
        /// <summary>
        /// Hidden - Hidden from some users on the network.
        /// </summary>
        PRINTER_ATTRIBUTE_HIDDEN = 0x20,
        /// <summary>
        /// Local - Directly connected to a computer. If both Local and Network bits are set, this indicates a network printer.
        /// </summary>
        PRINTER_ATTRIBUTE_LOCAL = 0x40,
        /// <summary>
        /// EnableDevQ - Enable the queue on the printer if available.
        /// </summary>
        PRINTER_ATTRIBUTE_ENABLEDEVQ = 0x80,
        /// <summary>
        /// KeepPrintedJobs - Spooler should not delete documents after they are printed.
        /// </summary>
        PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS = 0x100,
        /// <summary>
        /// DoCompleteFirst - Start jobs that are finished spooling first.
        /// </summary>
        PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST = 0x200,
        /// <summary>
        /// WorkOffline - Queue print jobs when a printer is not available.
        /// </summary>
        PRINTER_ATTRIBUTE_WORK_OFFLINE = 0x400,
        /// <summary>
        /// EnableBIDI - Enable bidirectional printing.
        /// </summary>
        PRINTER_ATTRIBUTE_ENABLE_BIDI = 0x800,
        /// <summary>
        /// Allow only raw data type jobs to be spooled.
        /// </summary>
        PRINTER_ATTRIBUTE_RAW_ONLY = 0x1000,
        /// <summary>
        /// Published - Published in the network directory service.
        /// </summary>
        PRINTER_ATTRIBUTE_PUBLISHED = 0x2000,
    }

    /// <summary>
    /// Printer capabilities.
    /// </summary>
    public enum PrinterCapabilities : ushort
    {
        /// <summary>
        /// Unknown
        /// </summary>
        Unknown = 0,
        /// <summary>
        /// Other
        /// </summary>
        Other = 1,
        /// <summary>
        /// Color Printing
        /// </summary>
        Color = 2,
        /// <summary>
        /// Duplex Printing
        /// </summary>
        Duplex = 3,
        /// <summary>
        /// Copies
        /// </summary>
        Copies = 4,
        /// <summary>
        /// Collation
        /// </summary>
        Collation = 5,
        /// <summary>
        /// Stapling
        /// </summary>
        Stapling = 6,
        /// <summary>
        /// Transparency
        /// </summary>
        Transparency = 7,
        /// <summary>
        /// Punch
        /// </summary>
        Punch = 8,
        /// <summary>
        /// Cover
        /// </summary>
        Cover = 9,
        /// <summary>
        /// Bind
        /// </summary>
        Bind = 10,
        /// <summary>
        /// Black and White Printing
        /// </summary>
        BlackWhite = 11,
        /// <summary>
        /// One-Sided
        /// </summary>
        OneSided = 12,
        /// <summary>
        /// Two-Sided Long Edge
        /// </summary>
        TwoSidedLong = 13,
        /// <summary>
        /// Two-Sided Short Edge
        /// </summary>
        TwoSidedShort = 14,
        /// <summary>
        /// Portrait
        /// </summary>
        Portrait = 15,
        /// <summary>
        /// Landscape
        /// </summary>
        Landscape = 16,
        /// <summary>
        /// Reverse Portrait
        /// </summary>
        ReversePortrait = 17,
        /// <summary>
        /// Reverse Landscape
        /// </summary>
        ReverseLandscape = 18,
        /// <summary>
        /// Quality High
        /// </summary>
        QualityHigh = 19,
        /// <summary>
        /// Quality Normal
        /// </summary>
        QualityNormal = 20,
        /// <summary>
        /// Quality Low
        /// </summary>
        QualityLow = 21,
    }

    /// <summary>
    /// Printer languages used.
    /// </summary>
    public enum PrinterLanguage : ushort
    {
        /// <summary>
        /// Other
        /// </summary>
        Other = 1,
        /// <summary>
        /// Unknown
        /// </summary>
        Unknown = 2,
        /// <summary>
        /// PCL
        /// </summary>
        PCL = 3,
        /// <summary>
        /// HPGL
        /// </summary>
        HPGL = 4,
        /// <summary>
        /// PJL
        /// </summary>
        PJL = 5,
        /// <summary>
        /// PS
        /// </summary>
        PS = 6,
        /// <summary>
        /// PS Printer
        /// </summary>
        PSPrinter = 7,
        /// <summary>
        /// IPDS
        /// </summary>
        IPDS = 8,
        /// <summary>
        /// PPDS
        /// </summary>
        PPDS = 9,
        /// <summary>
        /// EscapeP
        /// </summary>
        EscapeP = 10,
        /// <summary>
        /// Epson
        /// </summary>
        Epson = 11,
        /// <summary>
        /// DDIF
        /// </summary>
        DDIF = 12,
        /// <summary>
        /// Interpress
        /// </summary>
        Interpress = 13,
        /// <summary>
        /// ISO 6429
        /// </summary>
        ISO6429 = 14,
        /// <summary>
        /// LineData
        /// </summary>
        LineData = 15,
        /// <summary>
        /// DODCA
        /// </summary>
        DODCA = 16,
        /// <summary>
        /// REGIS
        /// </summary>
        REGIS = 17,
        /// <summary>
        /// SCS
        /// </summary>
        SCS = 18,
        /// <summary>
        /// SPDL
        /// </summary>
        SPDL = 19,
        /// <summary>
        /// TEK 4014
        /// </summary>
        TEK4014 = 20,
        /// <summary>
        /// PDS
        /// </summary>
        PDS = 21,
        /// <summary>
        /// IGP
        /// </summary>
        IGP = 22,
        /// <summary>
        /// Code V
        /// </summary>
        CodeV = 23,
        /// <summary>
        /// DSCDSE
        /// </summary>
        DSCDSE = 2,
        /// <summary>
        /// WPS
        /// </summary>
        WPS = 25,
        /// <summary>
        /// LN03
        /// </summary>
        LN03 = 26,
        /// <summary>
        /// CCITT
        /// </summary>
        CCITT = 27,
        /// <summary>
        /// QUIC
        /// </summary>
        QUIC = 28,
        /// <summary>
        /// CPAP
        /// </summary>
        CPAP = 29,
        /// <summary>
        /// DecPPL
        /// </summary>
        DecPPL = 30,
        /// <summary>
        /// SimpleText
        /// </summary>
        SimpleText = 31,
        /// <summary>
        /// NPAP
        /// </summary>
        NPAP = 32,
        /// <summary>
        /// DOC
        /// </summary>
        DOC = 33,
        /// <summary>
        /// imPress
        /// </summary>
        imPress = 34,
        /// <summary>
        /// Pinwriter
        /// </summary>
        Pinwriter = 35,
        /// <summary>
        /// NPDL
        /// </summary>
        NPDL = 36,
        /// <summary>
        /// NEC201PL
        /// </summary>
        NEC201PL = 37,
        /// <summary>
        /// Automatic
        /// </summary>
        Automatic = 38,
        /// <summary>
        /// Pages
        /// </summary>
        Pages = 39,
        /// <summary>
        /// LIPS
        /// </summary>
        LIPS = 40,
        /// <summary>
        /// TIFF
        /// </summary>
        TIFF = 41,
        /// <summary>
        /// Diagnostic
        /// </summary>
        Diagnostic = 42,
        /// <summary>
        /// CaPSL
        /// </summary>
        CaPSL = 43,
        /// <summary>
        /// EXCL
        /// </summary>
        EXCL = 44,
        /// <summary>
        /// LCDS
        /// </summary>
        LCDS = 45,
        /// <summary>
        /// XES
        /// </summary>
        XES = 46,
        /// <summary>
        /// MIME
        /// </summary>
        MIME = 47,
        /// <summary>
        /// XPS
        /// </summary>
        XPS = 48,
        /// <summary>
        /// HPGL2
        /// </summary>
        HPGL2 = 49,
        /// <summary>
        /// PCLXL
        /// </summary>
        PCLXL = 50,
    }

    /// <summary>
    /// Printer error information. 
    /// </summary>
    public enum PrinterError : ushort
    {
        /// <summary>
        /// Unknown
        /// </summary>
        Unknown = 0,
        /// <summary>
        /// Other
        /// </summary>
        Other = 1,
        /// <summary>
        /// No Error
        /// </summary>
        NoError = 2,
        /// <summary>
        /// Low Paper
        /// </summary>
        LowPaper = 3,
        /// <summary>
        /// No Paper
        /// </summary>
        NoPaper = 4,
        /// <summary>
        /// Low Toner
        /// </summary>
        LowToner = 5,
        /// <summary>
        /// No Toner
        /// </summary>
        NoToner = 6,
        /// <summary>
        /// Door Open
        /// </summary>
        DoorOpen = 7,
        /// <summary>
        /// Jammed
        /// </summary>
        Jammed = 8,
        /// <summary>
        /// Offline
        /// </summary>
        Offline = 9,
        /// <summary>
        /// Service Requested
        /// </summary>
        ServiceRequested = 10,
        /// <summary>
        /// Output Bin Full
        /// </summary>
        OutputBinFull = 11,
    }

    /// <summary>
    /// Result of Printer methods
    /// </summary>
    public enum PrinterResult : uint
    {
        /// <summary>
        /// Success
        /// </summary>
        Success = 0,
        /// <summary>
        /// Access Denied
        /// </summary>
        AccessDenied = 5,
        /// <summary>
        /// Invalid Printer Name
        /// </summary>
        InvalidPrinterName = 1801,
        /// <summary>
        /// Incompatible Printer Driver
        /// </summary>
        IncompatibleDriver = 1930,
    }

    /// <summary>
    /// Result of Process methods
    /// </summary>
    public enum ProcessResult : uint
    {
        /// <summary>
        /// Successful completion.
        /// </summary>
        Success = 0,
        /// <summary>
        /// The user does not have access to the requested information.
        /// </summary>
        AccessDenied = 2,
        /// <summary>
        /// The user does not have sufficient privilege.
        /// </summary>
        InsufficientPrivilege = 3,
        /// <summary>
        /// Unknown failure.
        /// </summary>
        Unknown = 8,
        /// <summary>
        /// The path specified does not exist.
        /// </summary>
        PathDoesNotExist = 9,
        /// <summary>
        /// The specified parameter is invalid.
        /// </summary>
        InvalidParameter = 21,
    }

    /// <summary>
    /// Additional values that control the priority class and the creation of the process. The following creation values can be specified in any combination, except as noted.
    /// </summary>
    [Flags]
    public enum ProcessCreateFlags : uint
    {
        /// <summary>
        /// None
        /// </summary>
        None = 0,
        /// <summary>
        /// If this flag is set, the calling process is treated as a debugger, and the new process is being debugged. The system notifies the debugger of all debug events that occur in the process being debugged. On Windows 95 and Windows 98 operating systems, this flag is not valid if the new process is a 16-bit application.
        /// </summary>
        Debug_Process = 0x1,
        /// <summary>
        /// If this flag is not set and the calling process is being debugged, the new process becomes another process being debugged. If the calling process is not a process of being debugged, no debugging-related actions occur.
        /// </summary>
        Debug_Only_This_Process = 0x2,
        /// <summary>
        /// The primary thread of the new process is created in a suspended state and does not run until the ResumeThread method is called.
        /// </summary>
        Create_Suspended = 0x4,
        /// <summary>
        /// For console processes, the new process does not have access to the console of the parent process. This flag cannot be used if the Create_New_Console flag is set.
        /// </summary>
        Detached_Process = 0x8,
        /// <summary>
        /// This new process has a new console, instead of inheriting the parent console. This flag cannot be used with the Detached_Process flag.
        /// </summary>
        Create_New_Console = 0x10,
        /// <summary>
        /// This new process is the root process of a new process group. The process group includes all of the processes that are descendants of this root process. The process identifier of the new process group is the same as the process identifier that is returned in the ProcessID property of the Win32_Process class. Process groups are used by the GenerateConsoleCtrlEvent method to enable the sending of either a CTRL+C signal or a CTRL+BREAK signal to a group of console processes.
        /// </summary>
        Create_New_Process_Group = 0x200,
        /// <summary>
        /// The environment settings listed in the EnvironmentVariables property use Unicode characters. If this flag is not set, the environment block uses ANSI characters.
        /// </summary>
        Create_Unicode_Environment = 0x400,
        /// <summary>
        /// Newly created processes are given the system default error mode of the calling process instead of inheriting the error mode of the parent process. This flag is useful for multithreaded shell applications that run with hard errors disabled.
        /// </summary>
        Create_Default_Error_Mode = 0x4000000,
        /// <summary>
        /// Used in order for the created process not to be limited by the job object.
        /// </summary>
        CREATE_BREAKAWAY_FROM_JOB = 0x1000000,
    }

    /// <summary>
    /// On some non-x86 processors, misaligned memory references cause an alignment fault exception. The No_Alignment_Fault_Except flag lets you control whether or not an operating system automatically fixes such alignment faults, or makes them visible to an application. On a millions of instructions per second (MIPS) platform, an application must explicitly call SetErrorMode with the No_Alignment_Fault_Except flag to have the operating system automatically fix alignment faults.  How an operating system processes several types of serious errors. You can specify that the operating system process errors, or an application can receive and process errors.  The default setting is for the operating system to make alignment faults visible to an application. Because the x86 platform does not make alignment faults visible to an application, the No_Alignment_Fault_Except flag does not make the operating system raise an alignment fault error—even if the flag is not set. The default state for SetErrorMode is to set all of the flags to 0 (zero).
    /// </summary>
    [Flags]
    public enum ProcessErrorMode : uint
    {
        /// <summary>
        /// None
        /// </summary>
        None = 0,
        /// <summary>
        /// If this flag is set, the operating system does not display the critical error handler message box when such an error occurs. Instead, the operating system sends the error to the calling process.
        /// </summary>
        Fail_Critical_Errors = 0x1,
        /// <summary>
        /// If this flag is set, the operating system automatically fixes memory alignment faults and makes them invisible to the application. It does this for the calling and descendant processes. This flag applies to reduced instruction set computing (RISC) only, and has no effect on x86 processors.
        /// </summary>
        No_Alignment_Fault_Except = 0x2,
        /// <summary>
        /// If this flag is set, the operating system does not display the general protection (GP) fault message box when a GP error occurs. This flag should only be set by debugging applications that handle GP errors.
        /// </summary>
        No_GP_Fault_Error_Box = 0x4,
        /// <summary>
        /// If this flag is set, the operating system does not display a message box when it fails to find a file. Instead, the error is returned to the calling process. This flag is currently ignored.
        /// </summary>
        No_Open_File_Error_Box = 0x8,
    }

    /// <summary>
    /// The text and background colors if a new console window is created in a console application. These values are ignored in graphical user interface (GUI) applications.
    /// </summary>
    [Flags]
    public enum ProcessFill : uint
    {
        /// <summary>
        /// Default
        /// </summary>
        Default = 0,
        /// <summary>
        /// Foreground blue
        /// </summary>
        Foreground_Blue = 0x1,
        /// <summary>
        /// Foreground green
        /// </summary>
        Foreground_Green = 0x2,
        /// <summary>
        /// Foreground red
        /// </summary>
        Foreground_Red = 0x4,
        /// <summary>
        /// Foreground intensity
        /// </summary>
        Foreground_Intensity = 0x8,
        /// <summary>
        /// Background blue
        /// </summary>
        Background_Blue = 0x10,
        /// <summary>
        /// Background green
        /// </summary>
        Background_Green = 0x20,
        /// <summary>
        /// Background red
        /// </summary>
        Background_Red = 0x40,
        /// <summary>
        /// Background intensity
        /// </summary>
        Background_Intensity = 0x80,
    }

    /// <summary>
    /// How the window is displayed to the user.
    /// </summary>
    public enum WindowStyle : uint
    {
        /// <summary>
        /// Hides the window and activates another window.
        /// </summary>
        SW_HIDE = 0,
        /// <summary>
        /// Activates and displays a window. If the window is minimized or maximized, the system restores it to the original size and position. An application specifies this flag when displaying the window for the first time.
        /// </summary>
        SW_NORMAL = 1,
        /// <summary>
        /// Activates the window, and displays it as a minimized window.
        /// </summary>
        SW_SHOWMINIMIZED = 2,
        /// <summary>
        /// Activates the window, and displays it as a maximized window.
        /// </summary>
        SW_SHOWMAXIMIZED = 3,
        /// <summary>
        /// Displays a window in its most recent size and position. This value is similar to SW_SHOWNORMAL, except that the window is not activated.
        /// </summary>
        SW_SHOWNOACTIVATE = 4,
        /// <summary>
        /// Activates the window, and displays it at the current size and position.
        /// </summary>
        SW_SHOW = 5,
        /// <summary>
        /// Minimizes the specified window, and activates the next top-level window in the Z order.
        /// </summary>
        SW_MINIMIZE = 6,
        /// <summary>
        /// Displays the window as a minimized window. This value is similar to SW_SHOWMINIMZED, except that the window is not activated.
        /// </summary>
        SW_SHOWMINNOACTIVE = 7,
        /// <summary>
        /// Displays the window at the current size and position. This value is similar to SW_SHOW, except that the window is not activated.
        /// </summary>
        SW_SHOWNA = 8,
        /// <summary>
        /// Activates and displays the window. If the window is minimized or maximized, the system restores it to the original size and position. An application specifies this flag when restoring a minimized window.
        /// </summary>
        SW_RESTORE = 9,
        /// <summary>
        /// Sets the show state based on the SW_ value that is specified in the STARTUPINFO structure passed to the CreateProcess function by the program that starts the application.
        /// </summary>
        SW_SHOWDEFAULT = 10,
        /// <summary>
        /// Windows Server 2003, Windows 2000, and Windows XP:  Minimizes a window, even when the thread that owns the window is hung. Only use this flag when minimizing windows from a different thread.
        /// </summary>
        SW_FORCEMINIMIZE = 11,
    }

    /// <summary>
    /// Type of resource being shared. Types include: disk drives, print queues, interprocess communications (IPC), and general devices.
    /// </summary>
    [Flags]
    public enum ShareType : uint
    {
        /// <summary>
        /// Disk Drive
        /// </summary>
        DiskDrive = 0x0,
        /// <summary>
        /// Print Queue
        /// </summary>
        PrintQueue = 0x1,
        /// <summary>
        /// Device
        /// </summary>
        Device = 0x2,
        /// <summary>
        /// IPC
        /// </summary>
        IPC = 0x3,

        /// <summary>
        /// Flagged for admin access
        /// </summary>
        Admin = 0x80000000,
    }

    /// <summary>
    /// Result of Share method
    /// </summary>
    public enum ShareResult : uint
    {
        /// <summary>
        /// Success
        /// </summary>
        Success = 0,
        /// <summary>
        /// Access Denied
        /// </summary>
        AccessDenied = 1,
        /// <summary>
        /// Unknown Failure
        /// </summary>
        UnknownFailure = 8,
        /// <summary>
        /// Invalid Name
        /// </summary>
        InvalidName = 9,
        /// <summary>
        /// Invalid Level
        /// </summary>
        InvalidLevel = 10,
        /// <summary>
        /// Invalid Parameter
        /// </summary>
        InvalidParameter = 21,
        /// <summary>
        /// Duplicate Share
        /// </summary>
        DuplicateShare = 22,
        /// <summary>
        /// Redirected Path
        /// </summary>
        RedirectedPath = 23,
        /// <summary>
        /// Unknown Device or Directory
        /// </summary>
        UnknownPath = 24,
        /// <summary>
        /// Net Name Not Found
        /// </summary>
        NetNameNotFound = 25,
    }

    /// <summary>
    /// Type of service provided to calling processes.
    /// </summary>
    public enum ServiceType : byte
    {
        /// <summary>
        /// Kernel Driver
        /// </summary>
        KernelDriver,
        /// <summary>
        /// File System Driver
        /// </summary>
        FileSystemDriver,
        /// <summary>
        /// Adapter
        /// </summary>
        Adapter,
        /// <summary>
        /// Recognized Driver
        /// </summary>
        RecognizedDriver,
        /// <summary>
        /// Own Process
        /// </summary>
        OwnProcess,
        /// <summary>
        /// Share Process
        /// </summary>
        ShareProcess,
        /// <summary>
        /// Interactive Process
        /// </summary>
        InteractiveProcess,
        /// <summary>
        /// Default for switch statement
        /// </summary>
        Unknown,
    }

    /// <summary>
    /// Start mode of the Windows base service.
    /// </summary>
    public enum ServiceStartMode : byte
    {
        /// <summary>
        /// Device driver started by the operating system loader (valid only for driver services).
        /// </summary>
        Boot,
        /// <summary>
        /// Device driver started by the operating system initialization process. This value is valid only for driver services.
        /// </summary>
        System,
        /// <summary>
        /// Service to be started automatically by the service control manager during system startup.
        /// </summary>
        Auto,
        /// <summary>
        /// Service to be started by the Service Control Manager when a process calls the StartService method.
        /// </summary>
        Manual,
        /// <summary>
        /// Service that cannot be started.
        /// </summary>
        Disabled,
    }

    /// <summary>
    /// Current state of the base service.
    /// </summary>
    public enum ServiceState : byte
    {
        /// <summary>
        /// Stopped
        /// </summary>
        Stopped,
        /// <summary>
        /// Start Pending
        /// </summary>
        StartPending,
        /// <summary>
        /// Stop Pending
        /// </summary>
        StopPending,
        /// <summary>
        /// Running
        /// </summary>
        Running,
        /// <summary>
        /// Continue Pending
        /// </summary>
        ContinuePending,
        /// <summary>
        /// Pause Pending
        /// </summary>
        PausePending,
        /// <summary>
        /// Paused
        /// </summary>
        Paused,
        /// <summary>
        /// Unknown
        /// </summary>
        Unknown,
    }

    /// <summary>
    /// Result of Service operations
    /// </summary>
    public enum ServiceResult : uint
    {
        /// <summary>
        /// Success
        /// </summary>
        Success = 0,
        /// <summary>
        /// Not Supported
        /// </summary>
        NotSupported = 1,
        /// <summary>
        /// Access Denied
        /// </summary>
        AccessDenied = 2,
        /// <summary>
        /// Dependent Services Running
        /// </summary>
        DependentServicesRunning = 3,
        /// <summary>
        /// Invalid Service Control
        /// </summary>
        InvalidServiceControl = 4,
        /// <summary>
        /// Service Cannot Accept Control
        /// </summary>
        ServiceCannotAcceptControl = 5,
        /// <summary>
        /// Service Not Active
        /// </summary>
        ServiceNotActive = 6,
        /// <summary>
        /// Service Request Timeout
        /// </summary>
        ServiceRequestTimeout = 7,
        /// <summary>
        /// Unknown Failure
        /// </summary>
        UnknownFailure = 8,
        /// <summary>
        /// Path Not Found
        /// </summary>
        PathNotFound = 9,
        /// <summary>
        /// Service Already Running
        /// </summary>
        ServiceAlreadyRunning = 10,
        /// <summary>
        /// Service Database Locked
        /// </summary>
        ServiceDatabaseLocked = 11,
        /// <summary>
        /// Service Dependency Deleted
        /// </summary>
        ServiceDependencyDeleted = 12,
        /// <summary>
        /// Service Dependency Failure
        /// </summary>
        ServiceDependencyFailure = 13,
        /// <summary>
        /// Service Disabled
        /// </summary>
        ServiceDisabled = 14,
        /// <summary>
        /// Service Logon Failure
        /// </summary>
        ServiceLogonFailure = 15,
        /// <summary>
        /// Service Marked For Deletion
        /// </summary>
        ServiceMarkedForDeletion = 16,
        /// <summary>
        /// Service No Thread
        /// </summary>
        ServiceNoThread = 17,
        /// <summary>
        /// Status Circular Dependency
        /// </summary>
        StatusCircularDependency = 18,
        /// <summary>
        /// Status Duplicate Name
        /// </summary>
        StatusDuplicateName = 19,
        /// <summary>
        /// Status Invalid Name
        /// </summary>
        StatusInvalidName = 20,
        /// <summary>
        /// Status Invalid Parameter
        /// </summary>
        StatusInvalidParameter = 21,
        /// <summary>
        /// Status Invalid Service Account
        /// </summary>
        StatusInvalidServiceAccount = 22,
        /// <summary>
        /// Status Service Exists
        /// </summary>
        StatusServiceExists = 23,
        /// <summary>
        /// Service Already Paused
        /// </summary>
        ServiceAlreadyPaused = 24,
    }

    /// <summary>
    /// Severity of the error if this service fails to start during startup. The value indicates the action taken by the startup program if failure occurs. All errors are logged by the system.
    /// </summary>
    public enum ServiceErrorControl : uint
    {
        /// <summary>
        /// Ignore. User is not notified.
        /// </summary>
        Ignore = 0,
        /// <summary>
        /// Normal. User is notified.
        /// </summary>
        Normal = 1,
        /// <summary>
        /// Severe. System is restarted with the last-known-good configuration.
        /// </summary>
        Severe = 2,
        /// <summary>
        /// Critical. System attempts to restart with a good configuration.
        /// </summary>
        Critical = 3,
        /// <summary>
        /// Unknown. Severity of the error is unknown.
        /// </summary>
        Unknown = 4,
    }

    /// <summary>
    /// Installed state of the product.
    /// </summary>
    public enum ProductInstallState : short
    {
        /// <summary>
        /// Bad configuration
        /// </summary>
        BadConfiguration = -6,
        /// <summary>
        /// Invalid argument
        /// </summary>
        InvalidArgument = -2,
        /// <summary>
        /// Unknown package
        /// </summary>
        UnknownPackage = -1,
        /// <summary>
        /// Advertised
        /// </summary>
        Advertised = 1,
        /// <summary>
        /// Absent
        /// </summary>
        Absent = 2,
        /// <summary>
        /// Installed
        /// </summary>
        Installed = 5,
    }

    /// <summary>
    /// Installation state. 
    /// </summary>
    public enum ProductConfigureState : uint
    {
        /// <summary>
        /// Default
        /// </summary>
        Default = 1,
        /// <summary>
        /// Local
        /// </summary>
        Local = 2,
        /// <summary>
        /// Source
        /// </summary>
        Source = 3,
    }

    /// <summary>
    /// Installation level.
    /// </summary>
    public enum ProductInstallLevel : uint
    {
        /// <summary>
        /// Default
        /// </summary>
        Default = 1,
        /// <summary>
        /// Minimum
        /// </summary>
        Minium = 2,
        /// <summary>
        /// Maximum
        /// </summary>
        Maximum = 3,
    }

    /// <summary>
    /// The reinstallation mode. 
    /// </summary>
    public enum ProductReinstallMode : uint
    {
        /// <summary>
        /// File missing
        /// </summary>
        FileMissing = 1,
        /// <summary>
        /// File older version
        /// </summary>
        FileOlderVersion = 2,
        /// <summary>
        /// File equal version
        /// </summary>
        FileEqualVersion = 3,
        /// <summary>
        /// File exact
        /// </summary>
        FileExact = 4,
        /// <summary>
        /// File verify
        /// </summary>
        FileVerify = 5,
        /// <summary>
        /// File replace
        /// </summary>
        FileReplace = 6,
        /// <summary>
        /// User data
        /// </summary>
        UserData = 7,
        /// <summary>
        /// Machine data    
        /// </summary>
        MachineData = 8,
        /// <summary>
        /// Shortcut
        /// </summary>
        Shortcut = 9,
        /// <summary>
        /// Package
        /// </summary>
        Package = 10,
    }

    /// <summary>
    /// Role of a computer in an assigned domain workgroup. A domain workgroup is a collection of computers on the same network. For example, a DomainRole property may show that a computer is a member workstation.
    /// </summary>
    public enum DomainRole : ushort
    {
        /// <summary>
        /// Standalone Workstation
        /// </summary>
        StandaloneWorkstation = 0,
        /// <summary>
        /// Member Workstation
        /// </summary>
        MemberWorkstation = 1,
        /// <summary>
        /// Standalone Workstation
        /// </summary>
        StandaloneServer = 2,
        /// <summary>
        /// Member Server
        /// </summary>
        MemberServer = 3,
        /// <summary>
        /// Backup Domain Controller
        /// </summary>
        BackupDomainController = 4,
        /// <summary>
        /// Primary Domain Controller
        /// </summary>
        PrimaryDomainController = 5,
    }

    /// <summary>
    /// Set of bit flags that define the join options.
    /// </summary>
    [Flags]
    public enum JoinDomainOptions : uint
    {
        /// <summary>
        /// Joins a computer to a domain. If this value is not specified, the join is a computer to a workgroup.
        /// </summary>
        Default = 0x1,
        /// <summary>
        /// Creates an account on a domain.
        /// </summary>
        CreateAccount = 0x2,
        /// <summary>
        /// Deletes an account when a domain exists.
        /// </summary>
        DeleteAccount = 0x4,
        /// <summary>
        /// The join operation is part of an upgrade from Windows 98 or Windows 95 to Windows 2000 or Windows NT.
        /// </summary>
        Upgrade = 0x10,
        /// <summary>
        /// Allows a join to a new domain, even if the computer is already joined to a domain.
        /// </summary>
        AllowNewJoin = 0x20,
        /// <summary>
        /// Performs an unsecured join.
        /// </summary>
        AllowUnsecure = 0x40,
        /// <summary>
        /// The machine, not the user, password passed. This option is only valid for unsecure joins.
        /// </summary>
        MachinePassword = 0x80,
        /// <summary>
        /// Writing SPN and DnsHostName attributes on the computer object should be deferred until the rename that follows the join.
        /// </summary>
        WaitForRename = 0x100,
        /// <summary>
        /// The APIs were invoked during install.
        /// </summary>
        APIInvoke = 0x40000,
    }
}